package org.wdcode.base.interfaces.action.impl;

import org.wdcode.base.interfaces.action.Action;
import org.wdcode.base.interfaces.service.Service;
import org.wdcode.base.struts.action.BaseAction;

import org.wdcode.common.util.CommonUtil;

/**
 * 使用通用业务接口实现的通用Action
 * @author WD
 * @since JDK6
 * @version 1.0 2009-09-23
 */
public abstract class BaseServiceAction<S extends Service<E>, E> extends BaseAction implements Action {
	// 序列化ID
	private static final long	serialVersionUID	= -9174499450146091443L;
	// 验证dels方法错误信息
	private final static String	DELS_ERROR			= "dels.error";
	// 通用业务接口
	private S					service;
	// 通用实体
	private E					entity;
	// ID数组
	private int[]				ids;
	// dels方法验证是否通过
	private boolean				isDels				= true;

	/**
	 * 验证dels方法
	 */
	public void validateDels() {
		// 判断ID数组为空
		if (CommonUtil.isEmpty(ids)) {
			// 清除其它错误信息
			clearErrors();
			// 添加错误信息
			addActionMessage(getText(DELS_ERROR));
			// 没通过验证
			isDels = false;
		}
	}

	/**
	 * 添加
	 * @return 跳转
	 * @throws Exception
	 */
	public String add() throws Exception {
		return addMessage(service.insert(entity) > 0 ? SUCCESS : ERROR);
	}

	/**
	 * 修改
	 * @return 跳转
	 * @throws Exception
	 */
	public String edit() throws Exception {
		return addMessage(service.update(entity) ? SUCCESS : ERROR);
	}

	/**
	 * 删除
	 * @return 跳转
	 * @throws Exception
	 */
	public String del() throws Exception {
		return addMessage(service.delete(entity) ? SUCCESS : ERROR);
	}

	/**
	 * 删除多个
	 * @return 跳转
	 * @throws Exception
	 */
	public String dels() throws Exception {
		// 判断验证通过
		if (isDels) {
			// 删除并添加信息
			addMessage(service.delete(ids) ? SUCCESS : ERROR);
		}
		// 返回到列表
		return LIST;
	}

	/**
	 * 获得通用业务接口
	 * @return 通用业务接口
	 */
	public S getService() {
		return service;
	}

	/**
	 * 设置通用业务接口
	 * @param service 通用业务接口
	 */
	public void setService(S service) {
		this.service = service;
	}

	/**
	 * 获得通用实体
	 * @return 通用实体
	 */
	public E getEntity() {
		return entity;
	}

	/**
	 * 设置通用实体
	 * @param entity 通用实体
	 */
	public void setEntity(E entity) {
		this.entity = entity;
	}

	/**
	 * 获得ID数组
	 * @return ID数组
	 */
	public int[] getIds() {
		return ids;
	}

	/**
	 * 设置ID数组
	 * @param ids ID数组
	 */
	public void setIds(int[] ids) {
		this.ids = ids;
	}
}
